#include <stdio.h>
#include <stdlib.h>

#define SIZE 64

int main(int argc, char *argv[])
{
    if(argc < 3)
    {
        // 如果使用命令的格式不对，直接退出
        fprintf(stderr, "Usages:%s <src_file> <dest_file>\n", argv[0]);
        exit(1);
    }
    
    FILE *fps = NULL;
    FILE *fpd = NULL;

    fps = fopen(argv[1], "r");
    if(fps == NULL)
    {
        // 如果源文件打开失败，直接退出
        perror("fopen()");
        exit(1);
    }

    fpd = fopen(argv[2], "w");
    if(fpd == NULL)
    {
        // 如果目标文件打开失败，先关闭已经打开的源文件，再退出
        fclose(fps);
        perror("fopen()");
        exit(1);
    }
    
    //// 使用fgetc和fputc进行文件的拷贝操作
    //int ch = 0;
    //while((ch=fgetc(fps)) != EOF)
    //{
    //    fputc(ch, fpd);
    //}
    
    //// 使用fgets和fputs进行文件的拷贝操作
    //char buf[SIZE] = { 0 };
    //while(fgets(buf, SIZE, fps) != NULL)
    //{
    //    fputs(buf, fpd);
    //}
    
    // 使用fread和fwrite进行文件的拷贝操作
    int size = 0;
    char buf[SIZE] = { 0 };
    while((size=fread(buf, 1, SIZE, fps)) > 0)
    {
        fwrite(buf, 1, size, fpd);
    }

    // 释放打开的文件资源，后释放被依赖的文件
    fclose(fpd);
    fclose(fps);

    exit(0);
}
